home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 207_01 / checkc.c < prev    next >
Text File  |  1980-01-01  |  22KB  |  709 lines

  1. /*  checkc.c -- 4th source file for check register program                   */
  2.  
  3. /*  copyright (c) 1986 by Jim Woolley and WoolleyWare, San Jose, CA          */
  4.  
  5. /*  vers. 1.0, 12/85 thru 5/86
  6.  */
  7.  
  8. /*  this file contains:
  9.  *      putcursor( i, f)
  10.  *      cursorput( i, c)
  11.  *      cursorto( r, c)
  12.  *      putpos( i)
  13.  *      puttitle()
  14.  *      disheading()
  15.  *      recheading( s1, s2)
  16.  *      putquery()
  17.  *      prompt( s)
  18.  *      char putcommand( c)
  19.  *      char putcntrl( c)
  20.  *      char putnext()
  21.  *      addmoney( m3, m1, m2, add)
  22.  *      movmoney( m2, m1, credit)
  23.  *      putmoney( m)
  24.  *      putdate( d)
  25.  *      formatd( s, n, d)
  26.  *      printd( d)
  27.  *      sign( i)
  28.  *      char witch( c)
  29.  *      iscntrl( c)
  30.  *      waitesc()
  31.  *      waitkey()
  32.  *      done()
  33.  *      saveclr()
  34.  *      savedat()
  35.  *      calcbbf()
  36.  *      char help()
  37.  *      abort( s1, s2)
  38.  *      aexit()
  39.  */
  40.  
  41. #include    "a:checks.h"
  42.  
  43. putcursor( i, f)                        /*  put cursor in entry i, field f   */
  44. int i, f;
  45. {
  46.     if ( f == PAYFIELD)
  47.         Character = min( Character, strlen( Entry[ i].payee));
  48.     else Character = 0;
  49.     cursorto(( i - First + HEAD), ( Ftoc[ f] + Character));
  50. }
  51.  
  52. cursorput( i, c)                        /*  put cursor in entry i, column c  */
  53. int i, c;
  54. {
  55.     cursorto(( i - First + HEAD), c);
  56. }
  57.  
  58. cursorto( r, c)                         /*  put cursor at row r, column c    */
  59. int r, c;                               /*  0, 0 is upper-left corner        */
  60. {
  61.     int i;
  62.  
  63.     if ( Printing)
  64.         putchar( '\n');
  65.     else
  66.     {
  67.         r += Linoff;                    /*  add offset                       */
  68.         c += Coloff;
  69.         if ( Cb4flg)
  70.         {
  71.             i = r;                      /*  swap                             */
  72.             r = c;
  73.             c = i;
  74.         }
  75.         putscr( Clead1);
  76.         putpos( r);
  77.         putscr( Clead2);
  78.         putpos( c);
  79.         putscr( Ctrail);
  80.     }
  81. }
  82.  
  83. putpos( i)                              /*  send cursor position i           */
  84. int i;                                  /*  ( 0 + offset) is home            */
  85. {
  86.     char *p, s[ 4];
  87.  
  88.     if ( Ascur)                         /*  if ASCII wanted                  */
  89.     {
  90.         strcpy(( p = s), "000");        /*  template                         */
  91.         if ( Ascur < 3)
  92.             ++p;
  93.         formatd( p, Ascur, i);
  94.         puts( p);
  95.     }
  96.     else putchar( i);
  97. }
  98.  
  99. puttitle()
  100. {
  101.     char f[ FNAMSIZE];
  102.     int i, length;
  103.  
  104.     strcpy( f, Filename);
  105.     *( index( f, '.')) = '\0';          /*  truncate at dot                  */
  106.  
  107. /*  display 5 spaces on left, right justify f on column (COLS - 1), precede
  108.  *  f with 2 spaces, then center Title in the remaining area; i.e.,
  109.  *  _____<<<<<<<<<<<<<<<<<<<<<<< center Title >>>>>>>>>>>>>>>>>>>>>__A:FILENAME
  110.  */
  111.     length = strlen( Title);
  112.     i = 5 + (( COLS - FNAMSIZE - 3) - length)/2;
  113.     length += i;
  114.     while ( i--)                        /*  center title                     */
  115.         putchar( ' ');
  116.     puts( Title);
  117.     i = ( COLS - 1) - length - strlen( f);
  118.     while ( i--)                        /*  fill title line (with Ivon)      */
  119.         putchar( ' ');
  120.     puts( f);
  121.     i = HEAD - 2;
  122.     while ( i--)
  123.         putchar( '\n');
  124. }
  125.  
  126. disheading()                            /*  display heading for display()    */
  127. {
  128.     if ( !Printing)
  129.     {
  130.         cursorto( 0, 0);
  131.         putscr( Ivon);
  132.     }
  133.     puttitle();
  134.     puts( 
  135. "  Date   Payee                                      C  Amount  DEP CLR  Balance"
  136.          );
  137.     putchar( '\n');
  138.     puts( 
  139. "-------- ------------------------------------------ - -------- --- --- --------"
  140.          );
  141.     if ( !Printing)
  142.         putscr( Ivoff);
  143. }
  144.  
  145. recheading( s1, s2)                     /*  display heading for reconcile()  */
  146. char *s1, *s2;
  147. {
  148.     if ( !Printing)
  149.     {
  150.         clrscr();
  151.         putscr( Ivon);
  152.     }
  153.     puttitle();
  154.     puts( 
  155. "  Last      Balance  _____ Cleared Entries ______  _______ All Entries ________"
  156.          );
  157.     putchar( '\n');
  158.     puts(
  159. "  Date   C  Forward   Checks   Deposits   Balance   Checks   Deposits   Balance"
  160.          );
  161.     putchar( '\n');
  162.     puts( s1);
  163.     puts( s2);
  164.     if ( !Printing)
  165.         putscr( Ivoff);
  166. }
  167.  
  168. putquery()                              /*  select and display query         */
  169. {
  170.     char test, cwitch, dep;
  171.  
  172.     if ( Recno > Maxentry)
  173.     {
  174.         prompt( "Press RETURN to start a new entry, or ^J for help");
  175.         return;
  176.     }
  177.     if ( isibbf( Recno))                /*  if a BBF entry                   */
  178.     {
  179.         prompt( "Do you wish to void this entry's status as ");
  180.         puts( BBF);
  181.         puts( " (Y/N)? N");
  182.         return;
  183.     }
  184.     test = ( Field == Oldfield);
  185.     cwitch = Field;
  186.     if ( test && cwitch != DEPFIELD && cwitch != CLRFIELD)
  187.         return;
  188.     switch ( cwitch)
  189.     {
  190.     case MMFIELD:
  191.         prompt( "Enter month");
  192.         break;
  193.     case DDFIELD:
  194.         prompt( "Enter date");
  195.         break;
  196.     case YYFIELD:
  197.         prompt( "Enter year");
  198.         break;
  199.     case PAYFIELD:
  200.         prompt( "Enter/edit payee    ( INSERT ");
  201.         puts( Inserton ? "ON )" : "OFF )");
  202.         break;
  203.     case CATFIELD:
  204.         prompt( "Enter category");
  205.         break;
  206.     case AMTFIELD:
  207.         prompt( "Enter/calculate amount");
  208.         cursorto(( HEAD - 4), ( AMTCOL - 9));
  209.         puts( "MEMORY = ");
  210.         putmoney( &Memory);
  211.         break;
  212.     case DEPFIELD:
  213.         prompt( "Is entry a deposit (Y/N)? ");
  214.         dep = Entry[ Recno].deposit;
  215.         goto yesno;
  216.     case CLRFIELD:
  217.         prompt( "Has entry cleared the bank (Y/N)? ");
  218.         dep = Entry[ Recno].clear;
  219. yesno:  putchar( dep ? 'Y' : 'N');
  220.         break;
  221.     }
  222.     return;
  223. }
  224.  
  225. prompt( s)                              /*  prompt for entry                 */
  226. char *s;
  227. {
  228.     int c;
  229.  
  230.     cursorto(( HEAD - 4), 0);
  231.     puts( s);
  232.     clreol( c = strlen( s));
  233.     if ( !( *Eraeol))                   /*  if no Eraeol string              */
  234.         cursorto(( HEAD - 4), c);       /*  return cursor                    */
  235.     Oldfield = -1;
  236. }
  237.  
  238. char putcommand( c)                     /*  display command                  */
  239. char c;                                 /*  return TRUE if cursor moved      */
  240. {
  241.     switch ( c)
  242.     {
  243.     case CTRLK:  case CTRLQ:  case CTRLC:  case CTRLR:
  244.     case CTRLB:  case CTRLO:  case CTRLP:
  245.         cursorto( 0, 0);
  246.         putscr( Ivon);
  247.         puts( CLRCOM);
  248.         putchar( '\r');
  249.         putcntrl( c);
  250.         putscr( Ivoff);
  251.         return ( TRUE);
  252.     default:
  253.         return ( FALSE);
  254.     }
  255. }
  256.  
  257. char putcntrl( c)                       /*  display control char             */
  258. char c;                                 /*  return ( c + CTRLTOA) or DEL     */
  259. {
  260.     if ( c != DEL)
  261.     {
  262.         putchar( '^');
  263.         putchar( c += CTRLTOA);
  264.     }
  265.     else puts( "DEL");
  266.     return ( c);
  267. }
  268.  
  269. char putnext()                          /*  display next command character   */
  270. {                                       /*  return upper case character      */
  271.     char c;
  272.  
  273.     putscr( Ivon);
  274.     if ( isprint( c = getchar()))
  275.     {
  276.         putchar( c);
  277.         c = toupper( c);
  278.     }
  279.     else c = putcntrl( c);
  280.     putscr( Ivoff);
  281.     return ( c);
  282. }
  283.  
  284. addmoney( m3, m1, m2, add)              /*  get m3 = m1 + m2 if add = TRUE   */
  285. struct money *m3, *m1, *m2;             /*  get m3 = m1 - m2 if add = FALSE  */
  286. char add;
  287. {
  288.     int d, c, sd;
  289.  
  290.     if ( add)
  291.     {
  292.         d = m1->dollar + m2->dollar;
  293.         c = m1->cent + m2->cent;
  294.     }
  295.     else
  296.     {
  297.         d = m1->dollar - m2->dollar;
  298.         c = m1->cent - m2->cent;
  299.     }
  300.     if ( d && ( sd = sign( d)) != sign( c))
  301.     {
  302.         d -= sd;
  303.         if ( sd < 0)
  304.             c -= 10000;
  305.         else c += 10000;
  306.     }
  307.     m3->dollar = d + c/10000;
  308.     m3->cent = c%10000;
  309. }
  310.  
  311. movmoney( m2, m1, credit)               /*  set m2 = m1 if credit = TRUE     */
  312. struct money *m2, *m1;                  /*  else, set m2 =